import { useEffect, useState } from 'react';

interface NetworkInformation {
  /**
   * 以兆比特每秒为单位的有效带宽估计，四舍五入到最接近的 25 千比特每秒的倍数。
   */
  downlink: number;
  /**
   * 底层连接技术的最大下行速度，以兆比特每秒（Mbps）为单位。
   */
  downlinkMax: number;
  /**
   * 返回连接的有效类型（意思是“slow-2g”、“2g”、“3g”或“4g”中的一个）
   */
  effectiveType: string;
  /**
   * 当前连接的有效往返时间估计，四舍五入到最接近的 25 毫秒的倍数。
   */
  rtt: number;
  /**
   * 如果用户在用户代理上设置了减少数据使用的选项，则返回 true。
   */
  saveData: boolean;
  /**
   * 设备用于网络通信的连接类型。它会是以下值之一：bluetooth、cellular、ethernet、none、wifi、wimax、other、unknown
   */
  type: string;
}

const useNetworkInformation = () => {
  const [networkInfo, setNetworkInfo] = useState<NetworkInformation | null>(null);

  useEffect(() => {
    const updateNetworkInfo = () => {
      if ((navigator as any).connection) {
        const connection = (navigator as any).connection;
        setNetworkInfo({
          downlink: connection.downlink,
          downlinkMax: connection.downlinkMax,
          effectiveType: connection.effectiveType,
          rtt: connection.rtt,
          saveData: connection.saveData,
          type: connection.type,
        });
      }
    };

    updateNetworkInfo();

    if ((navigator as any).connection) {
      const connection = (navigator as any).connection;
      connection.addEventListener('change', updateNetworkInfo);

      return () => {
        connection.removeEventListener('change', updateNetworkInfo);
      };
    }
  }, []);

  return networkInfo;
};

export default useNetworkInformation;
